/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clientereligadora.tableModel;

/**
 *
 * @author leandro.aquino
 */

import clientereligadora.entidades.Status_Religadora;
import clientereligadora.entidades.Status_Religadora;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.table.AbstractTableModel;

      
    
    public class ReligadoraTableModel extends AbstractTableModel {  
        
        DecimalFormat moedaFormat = new DecimalFormat("#####.00");
      
        /* Lista de recibos que representam as linhas. */  
        private List<Status_Religadora> linhas;  
      
        /* Array de Strings com o nome das colunas. */  
        private String[] colunas = new String[] {  
                "EST CHAVE","EST MAQ","F TEN","F CORR","F SBCRG" ,"AV SBCRG","CONT F TEN","CONT CUR","CONT SBCRG","CONT AV SBCRG",
                "CORR C AT F.A","CORR C AT F.B","CORR C AT F.C","VAL SBCRG F.A","VAL SBCRG F.B","VAL SBCRG F.C","LIM SBCRG","TEM SBCRG","TAN F.A","TEN F.B",
                "TEN F.C","CORR F.A","CORR F.B","CORR F.C","CORR F.N","EST SWITCH SERV","EST OP.","DATA"};  
      
      
        /* Cria um ReciboTableModel vazio. */  
        public ReligadoraTableModel() {  
            linhas = new ArrayList<>();  
        }  
      
        /* Cria um ReciboTableModel carregado com 
         * a lista de recibos especificada. */  
        public ReligadoraTableModel(List<Status_Religadora> listaReligadora) {  
            linhas = new ArrayList<Status_Religadora>(listaReligadora);  
        }  
      
      
        /* Retorna a quantidade de colunas. */  
        @Override  
        public int getColumnCount() {  
            // EstÃ¡ retornando o tamanho do array "colunas".  
            // Mas como o array Ã© fixo, vai sempre retornar 4.  
            return colunas.length;  
        }  
      
        /* Retorna a quantidade de linhas. */  
        @Override  
        public int getRowCount() {  
            // Retorna o tamanho da lista de recibos.  
            return linhas.size();  
        }  
      
        /*
         * Retorna o nome da coluna no Ã­ndice especificado. Este mÃ©todo Ã© usado
         * pela JTable para saber o texto do cabeÃ§alho.
         */
        @Override
        public String getColumnName(int columnIndex) {
            // Retorna o conteÃºdo do Array que possui o nome das colunas  
            // no Ã­ndice especificado.  
            return colunas[columnIndex];
        }

        ;  
      
        /* Retorna a classe dos elementos da coluna especificada. 
         * Este mÃ©todo Ã© usado pela JTable na hora de definir o editor da cÃ©lula. */  
        @Override
        public Class<?> getColumnClass(int columnIndex) {
            // Retorna a classe referente a coluna especificada.  
            // Aqui Ã© feito um switch para verificar qual Ã© a coluna  
            // e retornar o tipo adequado. As colunas sÃ£o as mesmas  
            // que foram especificadas no array "colunas".  
            switch (columnIndex) {

                case 0: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 1: //data lanÃ§amento [DATE] 
                    return int.class;

                case 2: // LanÃ§amento [STRING]  
                    return int.class;
                    
                case 3: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 4: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 5: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 6: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 7: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 8: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 9: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 10: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 11: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 12: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 13: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 14: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 15: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 16: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 17: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 18: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 19: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 20: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 21: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 22: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 23: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 24: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 25: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 26: // Primeira coluna Ã© Selcionada ou naum.  
                    return int.class;

                case 27: // Primeira coluna Ã© Selcionada ou naum.  
                    return Date.class;

                default:
                    // Se o Ã­ndice da coluna nÃ£o for vÃ¡lido, lanÃ§a um  
                    // IndexOutOfBoundsException (ExceÃ§Ã£o de Ã­ndice fora dos limites).  
                    // NÃ£o foi necessÃ¡rio verificar se o Ã­ndice da linha Ã© invÃ¡lido,  
                    // pois o prÃ³prio ArrayList lanÃ§a a exceÃ§Ã£o caso seja invÃ¡lido.  
                    throw new IndexOutOfBoundsException("columnIndex out of bounds");
            }
        }
      
        /* Retorna o valor da cÃ©lula especificada 
         * pelos Ã­ndices da linha e da coluna. */  
        @Override  
        public Object getValueAt(int rowIndex, int columnIndex) {  
            // Pega o recibo da linha especificada.  
            Status_Religadora status_Religadora = linhas.get(rowIndex);

            // Retorna o campo referente a coluna especificada.  
            // Aqui Ã© feito um switch para verificar qual Ã© a coluna  
            // e retornar o campo adequado. As colunas sÃ£o as mesmas  
            // que foram especificadas no array "colunas".  
            switch (columnIndex) {
                case 0: // Primeira coluna Ã© isSelected?.  
                    return status_Religadora.getEstado_chave();
                    
                case 1: // Primeira coluna Ã© a data de emissao  
                    return status_Religadora.getEstado_maquina();
                    
                case 2: // Segunda coluna Ã© o lancamento[STRING]  
                    return status_Religadora.getFalha_tensao();
                    
                case 3: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getFalha_corrente();

                case 4: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getFalha_sobrecarga();

                case 5: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getAviso_sobrecarga();

                case 6: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getContador_falhas_tensao();

                case 7: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getContador_curtos();

                case 8: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getContador_sobrecarga();

                case 9: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getContador_aviso_sobrecarga();

                case 10: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getCorrente_curto_atual_fase_a();

                case 11: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getCorrente_curto_atual_fase_b();

                case 12: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getCorrente_curto_atual_fase_c();

                case 13: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getValor_sobrecarga_fase_a();

                case 14: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getValor_sobrecarga_fase_b();

                case 15: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getValor_sobrecarga_fase_c();

                case 16: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getLimite_sobrecarga();

                case 17: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getTempo_sobrecarga();

                case 18: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getTensao_fase_a();

                case 19: // Primeira coluna Ã© Selcionada ou naum.  
                    return  status_Religadora.getTensao_fase_b();

                case 20: // Primeira coluna Ã© Selcionada ou naum.  
                    return status_Religadora.getTensao_fase_c();
                    
                case 21: // Primeira coluna Ã© Selcionada ou naum.  
                    return status_Religadora.getCorrente_fase_a();
                    
                case 22: // Primeira coluna Ã© Selcionada ou naum.  
                    return status_Religadora.getCorrente_fase_b();
                    
                case 23: // Primeira coluna Ã© Selcionada ou naum.  
                    return status_Religadora.getCorrente_fase_c();
                    
                case 24: // Primeira coluna Ã© Selcionada ou naum.  
                    return status_Religadora.getCorrent_fase_neutro();
                    
                case 25: // Primeira coluna Ã© Selcionada ou naum.  
                    return status_Religadora.getEstado_switch_servico();
                    
                case 26: // Primeira coluna Ã© Selcionada ou naum.  
                    return status_Religadora.getEstado_operacao();
                    
                case 27: // Primeira coluna Ã© Selcionada ou naum.  
                    return status_Religadora.getDatetime();
                               
                default:
                    // Se o Ã­ndice da coluna nÃ£o for vÃ¡lido, lanÃ§a um  
                    // IndexOutOfBoundsException (ExceÃ§Ã£o de Ã­ndice fora dos limites).  
                    // NÃ£o foi necessÃ¡rio verificar se o Ã­ndice da linha Ã© invÃ¡lido,  
                    // pois o prÃ³prio ArrayList lanÃ§a a exceÃ§Ã£o caso seja invÃ¡lido.  
                    throw new IndexOutOfBoundsException("columnIndex out of bounds");
            }
        }
        
        
        
      
        /* Seta o valor da cÃ©lula especificada 
         * pelos Ã­ndices da linha e da coluna. 
         * Aqui ele estÃ¡ implementado para nÃ£o fazer nada, 
         * atÃ© porque este table model nÃ£o Ã© editÃ¡vel. */  
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {};  
      
        /* Retorna um valor booleano que define se a cÃ©lula em questÃ£o 
         * pode ser editada ou nÃ£o. 
         * Este mÃ©todo Ã© utilizado pela JTable na hora de definir o editor da cÃ©lula. 
         * Neste caso, estarÃ¡ sempre retornando false, nÃ£o permitindo que nenhuma 
         * cÃ©lula seja editada. */  
        @Override  
        public boolean isCellEditable(int rowIndex, int columnIndex) {  
            
            boolean value = false;
            
            if(columnIndex == 0){
                value = true;
            }
            
            return value;  
        }
        
        
      
      
        ////////////////////////////////////////////////////////////  
        // Os mÃ©todos declarados atÃ© aqui foram as implementaÃ§Ãµes //  
        // de TableModel, que sÃ£o continuamente utilizados        //  
        // pela JTable para definir seu comportamento,            //  
        // por isso o nome Table Model (Modelo da Tabela).        //  
        //                                                        //  
        // A partir de agora, os mÃ©todos criados serÃ£o            //  
        // particulares desta classe.                             //  
        ////////////////////////////////////////////////////////////  
      
      
        /* Retorna o recibo da linha especificada. */  
        public Status_Religadora getDadosMedidor(int indiceLinha) {  
            return linhas.get(indiceLinha);  
        }  
          
        /* Adiciona um registro. */  
        public void addMedidor(Status_Religadora Status_Religadora) {  
            // Adiciona o registro.  
            linhas.add(Status_Religadora);  
      
            // Pega a quantidade de registros e subtrai um para achar  
            // o Ãºltimo Ã­ndice. Ã‰ preciso subtrair um, pois os Ã­ndices  
            // comeÃ§am pelo zero.  
            int ultimoIndice = getRowCount() - 1;  
      
            // Reporta a mudanÃ§a. O JTable recebe a notificaÃ§Ã£o  
            // e se redesenha permitindo que visualizemos a atualizaÃ§Ã£o.  
            fireTableRowsInserted(ultimoIndice, ultimoIndice);  
        }  
      
        /* Remove a linha especificada. */  
        public void removeMedidor(int indiceLinha) {  
            // Remove o recibo da linha especificada.          
            linhas.remove(indiceLinha);  
      
            // Reporta a mudanÃ§a. O JTable recebe a notificaÃ§Ã£o  
            // e se redesenha permitindo que visualizemos a atualizaÃ§Ã£o.  
            fireTableRowsDeleted(indiceLinha, indiceLinha);  
        }  
      
        /* Adiciona uma lista de recibos ao final dos registros. */  
        public void addListaDeMedidor(List<Status_Religadora> Status_Religadora) {  
            // Pega o tamanho antigo da tabela.  
            int tamanhoAntigo = getRowCount();  
      
            // Adiciona os registros.  
            linhas.addAll(Status_Religadora);  
      
            // Reporta a mudanÃ§a. O JTable recebe a notificaÃ§Ã£o  
            // e se redesenha permitindo que visualizemos a atualizaÃ§Ã£o.  
            fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);  
        }  
      
        /* Remove todos os registros. */  
        public void limpar() {  
            // Remove todos os elementos da lista de recibos.  
            linhas.clear();  
      
            // Reporta a mudanÃ§a. O JTable recebe a notificaÃ§Ã£o  
            // e se redesenha permitindo que visualizemos a atualizaÃ§Ã£o.  
            fireTableDataChanged();  
        }  
      
        /* Verifica se este table model estÃ¡ vazio. */  
        public boolean isEmpty() {  
            return linhas.isEmpty();  
        }  
      
    }  

